package com.csw.compose.ex

import android.util.Log
import androidx.compose.foundation.clickable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import kotlinx.coroutines.delay

/**
 * 点击节流，用于防止快速双击重复触发单击事件
 * @param delayTime 延迟事件，用于控制触发点击后需要间隔多久才能再次触发
 * @param onClick 点击事件
 */
fun Modifier.clickThrottle(delayTime: Long = 300, onClick: () -> Unit): Modifier {
    return composed {
        //可变状态 用户已点击
        val clicked = remember { mutableStateOf(false) }
        //创建附带效应（如果当前用户已经点击，则延迟一段时间后将点击状态恢复为默认）
        //以状态为key，使得每次状态变化时会执行一次状态恢复
        LaunchedEffect(clicked.value) {
            if (clicked.value) {
                delay(delayTime)
                clicked.value = !clicked.value
            }
        }
        //监听组件点击，当点击时更新状态并回调
        Modifier.clickable(!clicked.value) {
            clicked.value = !clicked.value
            onClick()
        }
    }
}